package com.captjack.core.configuration;

import com.captjack.core.controller.IndexController;
import com.captjack.core.model._MappingKit;
import com.jfinal.config.Constants;
import com.jfinal.config.Handlers;
import com.jfinal.config.Interceptors;
import com.jfinal.config.JFinalConfig;
import com.jfinal.config.Plugins;
import com.jfinal.config.Routes;
import com.jfinal.core.JFinal;
import com.jfinal.json.FastJsonFactory;
import com.jfinal.log.Log4jLogFactory;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.hikaricp.HikariCpPlugin;
import com.jfinal.template.Engine;

/**
 * @author Administrator
 */
public class CompanyWeChatConfig extends JFinalConfig {

    /**
     * 配置常量
     */
    @Override
    public void configConstant(Constants constants) {
        // 加载少量必要配置，随后可用PropKit.get(...)获取值
        constants.setEncoding("utf-8");
        // 默认使用fastjson
        constants.setJsonFactory(new FastJsonFactory());
        // 使用log4j
        constants.setLogFactory(new Log4jLogFactory());
        // 配置错误异常页面
        constants.setError404View("/error/404.html");
        constants.setError500View("/error/500.html");
        // ApiConfigKit 设为开发模式可以在开发阶段输出请求交互的 xml 与 json 数据
    }

    /**
     * 配置路由
     */
    @Override
    public void configRoute(Routes routes) {
        // 第三个参数为该Controller的视图存放路径
        routes.add("/", IndexController.class);
    }

    /**
     * 配置插件
     */
    @Override
    public void configPlugin(Plugins plugins) {
        HikariCpPlugin hikariCpPlugin = new HikariCpPlugin("jdbc:mysql://127.0.0.1:3306/guns?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull", "root", "root");
        hikariCpPlugin.setDriverClass("com.mysql.jdbc.Driver");
        plugins.add(hikariCpPlugin);
        /*
            ActiveRecrod支持插件。ActiveReceord中定义了
            addMapping(String tableName, Class<? extends Model> modelClass>)方法，
            该方法建立了数据库表名到Model的映射关系
         */
        ActiveRecordPlugin activeRecordPlugin = new ActiveRecordPlugin(hikariCpPlugin);
        _MappingKit.mapping(activeRecordPlugin);
        plugins.add(activeRecordPlugin);
        // EhCachePlugin ecp = new EhCachePlugin();
        // me.add(ecp);

        // 使用redis分布accessToken
        // RedisPlugin redisPlugin = new RedisPlugin("qyweixin", "127.0.0.1");
        // redisPlugin.setSerializer(JdkSerializer.me); // 需要使用fst高性能序列化的用户请删除这一行（Fst jar依赖请查看WIKI）
        // me.add(redisPlugin);
    }

    /**
     * 配置全局拦截器
     */
    @Override
    public void configInterceptor(Interceptors me) {

    }

    /**
     * 配置处理器
     */
    @Override
    public void configHandler(Handlers me) {

    }

    public static void main(String[] args) {
        JFinal.start("src/main/webapp", 8080, "/");
    }

    @Override
    public void afterJFinalStart() {
        // 单个应用可以直接在启动之后添加
    }

    @Override
    public void configEngine(Engine engine) {

    }

}
